עצים ועצי חיפוש Lecture3 of Geiger & Itai s slide brochure www.cs.techio.ac.il/~dag/courseds Chapter 5.5 rees 9 97) חומר קריאה לשיעור זה Chapter 3 Biary Search rees 44 6) Geiger & Itai, 00
עצים דוגמאות י ח ס ין אברהם. א יל ן ישמאל יצחק בנים יעקב עשו עוד בנים ובת יוסף אפריים מנשה cs,echio
ביטויים אריתמטיים עצים 5+3) * 0/0) + 8-6)). 3 * 5+3) 0/0) + 8-6)) + + 5 3 0/0) 8-6) / - 0 0 8 6 cs,echio
עצים 4 עץ מנצחים )גביע מכבי חיפה מכבי חיפה הפועל חיפה.3 cs,echio 4. מבנה היררכי מכבי ת "א צה"ל חיל הים חיל האוויר חיל היבשה שריון תותחנים... חי"ר חטיבת צנחנים חטיבת הנח"ל 856 גדוד... גדוד 934 מחלקה מחלקה מכבי חיפה כיתה כיתה אלון אבוטבול
5 גרפים מכוונים Graphs) Directed V = a,b,c,d,e צמתים V גרף מכוון הוא זוג וקבוצת קשתות V,E) המורכב מקבוצת.E V X V E = a,b),a,d),b,c),b,e),c,c),d,c),d,e),e,a),e,c) a d b e c.m = 9, = 5. נסמן V = וכן E m = בדוגמא:
גרפים לא-מכוונים Graphs) Udirected 6 גרף לא-מכוון הוא זוג V,E) המורכב מקבוצת צמתים V וקבוצת קשתות E קשת ב- E היא קבוצה בת שני איברים מתוך V. קשת מסומנת ע"י i,j) )במקום הסימון המדויק יותר.){i,j} a b c d e V = a,b,c,d,e חוג עצמי E = a,b), a,d), a,d),b,c),b,e),c,c),d,c),d,e),e,c) נסמן V = וכן E. m = בדוגמא: = 5.m = 9,. מספר הקשתות m קטן בכל גרף מ- cs,echio
7 הגדרות לגרפים מכוונים Graphs) Directed V = a,b,c,d,e E = a,b),a,d),b,c),b,e),c,c),d,c),d,e),e,a),e,c) מסלול )מכוון בגרף )מכוון V,E) הוא סדרת צמתים ) k v,v,..,v צמתים עוקבים בסדרה, ) +i v) i v, היא קשת ב- E. המסלול נקרא מעגל )מכוון אם v =v k )לדוגמא, a d.)a,d,e,a) b e c גרף התשתית של גרף מכוון G הוא גרף לא-מכוון עם אותם צמתים ואותם קשתות כמו ב- G אך ללא כוון. לדוגמא: b c כך שלכל זוג כמו ב- G a d e
עצים מכוונים מקור הוא צומת שאף קשת אינה מצביעה אליו. עץ מכוון הוא גרף מכוון ללא מעגלים )בגרף התשתית שלו בלבד הנקרא שורש. ואשר לו מקור אחד 8 הגדרות דוגמאות.v u בן של v אם קיימת קשת מצומת u לצומת b בן של f b.u v v אב של u בן של אם אב של e a b c d e f g h i j k cs,echio
דוגמאות a צאצא של g h אב-קדמון של b תת העץ ששורשו g מכיל 3 צמתים ושתי קשתות. דרגת a היא. h הוא עלה. b d e 9 הגדרות v צ א צ א של u u אב ק ד מ ון של עצים מכוונים אם קיים מסלול מכוון מצומת u v. ל- v אם v צאצא של u. תת-עץ של G ששורשו v הוא עץ מכוון שצמתיו הם v עצמו וכל ה צ א צ א ים של v, והקשתות שלו הן הקשתות המחברות צמתים אלו ב- G. דרגת צומת v היא מספר הבנים של עלה הוא צמת ללא בנים. צומת פנימי הוא צומת שאינו עלה. f a.v c g h i j k cs,echio
a עצים מכוונים 0 עומק d h b e f i a גובה j c g עומק של צומת v הוא מספר הקשתות משורש העץ אל v )המרחק מהשורש. גובה של צומת v הוא מספר הקשתות מ- v לצאצא הרחוק ביותר k של v )עלה. גובה העץ הוא הגובה של שורשו. d h b e f i j c g k הערה: לעיתים נשמיט את החצים מתוך הבנה שכוון הקשתות כלפי מטה. כמו כן לרוב נאמר עץ במקום עץ מכוון. cs,echio
עצים מסודרים a עץ מסודר הוא עץ מכוון b c שבו הבנים של כל צומת מסודרים )משמאל לימין. d e f g h i j k b a c למשל עץ זה שונה מהעץ העליון בגלל שסדר הבנים השתנה. e d f g cs,echio h i j k
עצים בינריים עץ בינרי: עץ שבו לכל צומת שאינו עלה יש בן שמאלי ו/או בן ימני. הגדרה רקורסיבית: עץ בינרי הוא מבנה. ריק )ללא צמתים, או. מורכב משלושה חלקים: צומת הנקרא שורש, עץ בינרי הנקרא תת-עץ שמאלי, ועץ בינרי הנקרא תת-עץ ימני. cs,echio
3 עצים בינריים מלאים ושלמים עץ בינרי מלא :full) עץ שבו לכל צומת פנימי בנים. :complete) עץ בינרי מלא שבו כל העלים באותו עומק. עץ בינרי שלם cs,echio עץ בינרי כמעט שלם: עץ בינרי שלם שהוצאו ממנו עלים )"מצד ימין".
תכונות עצים בינריים שלמים 4 :h בעץ בינרי שלם צמתים, L בעל וגובה עלים,. מספר הצמתים בעומק i = i :i. מספר העלים: L= h = h.3 h i 0 i h i 0 i h מספר הצמתים:.4 הגובה: - +) h = log.5 מספר הצמתים הפנימיים: - L - L = h - = 0 3 cs,echio
מימוש "מערכי" לעץ בינרי שלם a 5 b c 3 d e 4 5 6 7 f g h i j k l m o 8 9 0 3 4 5 0 3 4 5 6 7 8 9 0 3 4 5 a b c d e f g h i j k l m o בן שמאלי של צומת i נמצא ב- i בן ימני של צומת i נמצא ב- + i אבא של של צומת i נמצא ב- i / יעיל רק עבור עצים שלמים או כמעת שלמים! cs,echio
מימוש באמצעות מצביעים 6 typedef struct ode { DAA_ype value; struct ode *left, *right; } NODE; value left right מבנה צומת: b b d e d e h i k h i k 0 3 4 5 6 7 b d e h i f k cs,echio
ס י ור ים בעצים בינריים 7 a preorder b c ב ק ר בשורש ס י ר בתת העץ השמאלי d e f g ס י ר בתת העץ הימני h i a b d e c f h g i postorder ס י ר בתת העץ השמאלי ס י ר בתת העץ הימני ב ק ר בשורש )חשוב ביטויים אריתמטיים d e b h f i g c a iorder ס י ר בתת העץ השמאלי ב ק ר בשורש ס י ר בתת העץ הימני d b e a f h c i g cs,echio
8 חישוב iorder סייר בתת העץ השמאלי בקר בשורש )הדפס סייר בתת העץ הימני 5+3)*0/0)+8-6)) ו ה מ ר ה של ביטויים אריתמטיים * + + 5 3 / - 0 0 8 6 postorder ifix סייר בתת העץ השמאלי סייר בתת העץ הימני בקר בשורש )חשב את ערך הביטוי או הדפס. ביטויי postfix נקראים כתיב פולני ע"ש שם הלוגיקאי הפולני Łukasievicz בביטוי postfix אין צורך בסוגריים: לכל ביטוי postfix יש לכל היותר פרוק יחיד! cs,echio postfix 5 3 + 0 0 / 8 6 - + *
חישוב ביטוי postfix באמצעות מחסנית 9 אלגוריתם לחישוב ביטוי postfix התחל עם מחסנית ריקה.. עבור על כל ביטוי משמאל לימין:. אם האיבר הבא הוא אופרנד )מספר - הכנס אותו למחסנית. 3. אם הוא פעולה הפעל את הפעולה על שני האיברים 4. שבראש המחסנית והכנס את התוצאה למחסנית. cs,echio 6 0 8 8 3 0 0 4 5 5 8 8 8 8 8 8 8 8 3 5 3 + 0 0 / 8 6 - + * :postfix
מימוש פרוצדורת postorder 0 void postorder NODE *) { if = = NULL) retur; else { } cs,echio postorder left); /* */ postorder right); /* */ visit ; /* 3*/ retur;} הערה: ע"י החלפת שורה # עם שורה #3 נקבל מימוש של סיור.iorder תרגיל I: תרגיל יש לשנות תוכנית זו כך שתחשב ערך של ביטוי אריתמטי. יש לכתוב תוכנית זו ללא רקורסיה )תוך שימוש במחסנית. value left right נשתמש במימוש מבנה צומת: "מצביעי" :II
דוגמא לשימוש חביב it height NODE *) { it L,R; if = = NULL) retur else { L = height left); R = height right); retur + maxl,r) ; } } פונקציה רקורסיבית לחישוב גובה העץ )דוגמא לסיור :)postorder
מימושים של עצים מסודרים a b c d e f g h i j k אם לכל צמת דרגה d: values) child[0] child[] child[d-] cs,echio
נתן לייצג עץ מדרגה כלשהי מימושים של עצים מסודרים ע"י עץ בינרי: values) first-child ext-brother 3 a b c d e f g h i j k cs,echio
עצים מסודרים מה הקשר בין גובה העץ המקורי וגובה העץ הבינרי? 4 a b c d e f g h i j k כאשר d הוא מספר הבנים המקסימלי בעץ המקורי., h ew d h origial cs,echio
5 מילון Dictioary) מילון מאחסן אוסף של ר ש ומ ות מהטיפוס )מפתח, אינפורמציה. המפתח שונה )בד"כ מרשומה לרשומה. אוסף המפתחות האפשריים מסומן ב- U. לדוגמא: מספרים שלמים. פעולות: created) אתחול: יצירת מילון ריק. fidd,x) או.NULL שמפתחה x חיפוש: החזר מצביע לרשומה ב- D isertd,x,ifo) הוספה: הוסף ל- D רשומה שמפתחה x. deleted,x) סלק מ- D רשומה שמפתחה x. הוצאה: כללים: x כל שייך לקבוצת המפתחות U. x מופיע לכל היותר פעם אחת במילון )בדר"כ. cs,echio
מילון, מבנה חיפוש ועצי חיפוש פעולות נוספות כאשר מוגדר סדר על U )למשל כאשר מפתח הוא מספר: mid) מינימום: החזר את המפתח המינימלי ב- D. עוקב: החזר מצביע לאיבר במילון D בעל המפתח הקטן extd,x) ביותר שגדול מ- x. 6 עוקב מילון + מינימום + נקרא = מבנה חיפוש מטרה: לבצע את כל הפעולות בזמן Olog )במקרה הגרוע ביותר הוא מספר המפתחות הנמצאים במילון בזמן ביצוע הפעולה. כאשר עצי חיפוש: היא משפחה של מימושים למבנה חיפוש. cs,echio
עץ בינרי כעץ חיפוש נשתמש בעץ בינרי מכוון. בכל צומת נאחסן רשומה אחת מתוך המילון )או מפתח ומצביע לאינפורמציה של הרשומה. נשמור על הכלל הבא: עבור צומת כלשהו בעל מפתח x, כל המפתחות בתת העץ השמאלי קטנים מ- x וכל המפתחות בתת העץ הימני גדולים מ- x. x 7 y z cs,echio y x z
0 8 60 30 63 56 0 37 88 45 40 35 70 00 0 456 cs,echio fid70,) fid80,) 80 isert80,) סיבוכיות fid Oh) סיבוכיות isert Oh)
0 9 30 60 63 56 סיבוכיות max Oh) 0 37 88 45 40 35 70 00 0 456 cs,echio isert,) 80 max) אם שומרים מצביע לאבר המכסימלי סיבוכיות max O)
delete 0 מקרא 30 60 30 63 56 0 37 88 45 40 35 70 00 0 456 80 cs,echio delete00,)
0 מקרא 3 60 30 63 56 0 37 88 45 40 35 70 0 456 80 cs,echio delete88,)
0 מקרא 3 3 60 30 63 56 0 37 70 45 40 35 80 0 456 cs,echio delete,) סיבוכיות delete Oh)
עץ בינרי כעץ חיפוש 33 הערה: בציור מופיעים רק המפתחות ולא הרשומות במלואן. 8 3 0 7 אלגוריתם החיפוש: fid,x) אם ריק, דווח ש- x לא בעץ. יהי y הערך שבשורש. אם x, = y החזר מצביע לצומת המחזיק את x. אם x, y< המשך את החיפוש בתת העץ השמאלי של. אחרת )כאשר, x < y המשך את החיפוש בתת העץ הימני של....3.4.5 cs,echio
34 אלגוריתם הכנסה: isert,x) הכנסה בעץ חיפוש x בעץ החיפוש. חפש את. אם x נמצא ב-, עצור ודווח.. יהי v הצומת האחרון במסלול החיפוש של x ויהי y המפתח שנמצא ב- v. 3. w עם מפתח x כבן שמאלי של v. 4. אם,x>y הוסף צומת v. w עם מפתח x כבן ימני של, הוסף צומת 5. אחרת כאשר x < y 8 3 0 7 v isert,4) cs,echio 4 w
35 אלגוריתם הוצאה: הוצאה מעץ חיפוש המקרים הקלים יהי v צומת בעץ המיועד להוצאה. אם v עלה, סלק אותו.. אם ל- v בן יחיד, תן לאבא של v להצביע על הבן.. 5 delete 5 8 8 4 7 9 4 7 9 3 6 3 6 5 delete 4 5 8 8 4 7 9 3 7 9 3 6 6
36 הוצאה מעץ חיפוש אלגוריתם הוצאה. יהי v צומת בעץ המיועד להוצאה. אם v עלה, סלק אותו.. אם ל- v בן יחיד, תן לאבא של v להצביע על הבן.. אחרת: 3. יהי w הצומת העוקב ל- v בסדר.iorder )זהו הצומת המכיל את הערך הבא אחרי הערך שב- v כלומר הצומת המתקבל ע"י פניה אחת ימינה ואח"כ כל הדרך שמאלה. שימו לב שלצומת w בן אחד לכל היותר. v 5 4. החלף בין צומת v וצומת w. 5. כעת יש ל- v לכל היותר בן אחד. המשך בצעד או כנדרש. w delete 5 6 8 8 3 cs,echio w 6 7 9 v )צעד.)5 3 נותר להוציא את v 7 9
דוגמא נוספת 37 v 5 delete 5 w 7 3 w 8 7 9 3 v 8 9 7.5 7.5 w 7 delete v 3 v 8 9 7.5 cs,echio
סיבוכיות הפעולות: 38 סיבוכיות fuctio פעולה O) created) אתחול Oh) fidd,x) חיפוש Oh) isertd,x,ifo) הוספה Oh) deleted,x) הוצאה Oh) O) mid) מינימום Oh) O) extd,x) עוקב cs,echio
נתוח זמנים 39 זמן חיפוש/הכנסה/הוצאה הוא לינארי בגובה העץ. מהו גובה העץ? h= log מקרה טוב. עץ שלם. h = - מקרה גרוע. עץ הנראה כרשימה ליניארית. ומהו הגובה הממוצע? cs,echio
cs,echio גובה ממוצע ברור שצורת העץ נקבעת על פי סדר ההכנסה )למשל הסדר,,3 יוצר שרשרת לעומת,,3 שיוצר עץ מאוזן. מספר אפשרויות )הסדרים להכניס צמתים לעץ הוא!. נסמן ב- hi) את גובה העץ הנוצר בסדר ה- i. הגובה הממוצע מוגדר כדלקמן: h!! i h i ) ניתן להראות שהגובה הממוצע הוא Olog כלומר בממוצע כל הפעולות מתבצעות בזמן.Olog ההוכחה )עמודים 54-58 בספר הלימוד מושמטת. נבחן טענה דומה אך קלה יותר להוכחה: זמן בניה ממוצע של עץ חיפוש בינרי הוא.O log 40
4 זמן בניה צפוי של עץ חיפוש בינרי נחשב את זמן בנית עץ אקראי המתקבל מהכנסת פרמוטציה אקראית a a נניח שסדר האיברים הוא לעץ ריק. b b b j a b j- b b j+ b נסמן ב- ) את מספר ההשוואות הממוצע הדרוש לבניית עץ בן צמתים. j- לפיכך j-) הוא מספר ההשוואות הממוצע הדרוש לבניית עץ בן צמתים -j ו- -j) הוא מספר ההשוואות הממוצע הדרוש לבניית עץ בן צמתים. ) j ) j ) j ) 0 ) 0 ) משוואת ההפרשים המתאימה:
cs,echio 4 םישרפהה תאושמ ןורתפ ) ) ) ) ) ) j j j j j ) ) ) j j ) ) ) ) ) ) ) ) ) ) j j ) ) ) ) 0 0 ) ) ) ) ) j j j
cs,echio 43 םישרפהה תאושמ ןורתפ ) ) ) ) ) ) ) ) log ) ) log ) O O רידגנ ) ) g ) ) g g ) log ) ) ) O H g g g ןכל
עוד על המספר ההרמוני 44 H i i l 0.577... o ) O l ) קבוע אוילר lim H l על קבוע אוילר: אוילר, שהגדיר את הקבוע, ציין כי הוא "ראוי להתייחסות רצינית" 0.57756649 05386060 6509008 404304... לא ידוע אם הוא רציונלי )אם כן, יש לו יותר מ- 0 4,080 ספרות במכנה cs,echio